<?php
//TODO mudar a exibição da view do modo herança para alguma outra forma.
	//porque!?

class Controller {
		
	public $name;			//recebe automaticamente o nome do controller
	public $subfolder;		//pasta em que ele se encontra
	public $actionCalled;
	
	public $model;	//nome do modelo que será carregado autometicamente
					//o usuário pode muda-lo ou acrescentar coisas nele pelo seu construtor.
	
	//essas variáveis são passadas no dispatcher (NAO PARA O CONSTRUTOR!!)
	//o programador pode altera-las a qualquer momento de dentro da action!
	public $tplFolder; //receberá automaticamente o nome do controller
	public $tplFile;	//receberá automaticamente o nome da action
	public $tplParent = 'html';
	
	public $render = true; //define se será renderizada uma interface ou não
	
	private $view; //instância da view (ver se é realmente nescessário)
	
	public $data; //recebe e envia dados de formulário
	
	//END variables ========================================================
	
	public function __construct()
	{
		$this->view = new View();
		
		//TODO ver se o tratamento do post está adequado.
		$this->data = isset($_POST['data']) ? stripslashes_deep($_POST['data']): null;
	}
	
	/**
	 * carrega o nome que supostamente será a pasta onde se localizará a view
	 */
	public function _afterConstruction()
	{
		$this->tplFolder 	= $this->subfolder . $this->name;
	}
	
	/**
	 * carrega o nome que supostamente será o da view (igual ao nome da action)
	 */
	public function _beforeActionCall()
	{
		
		$this->tplFile = $this->actionCalled;
	}
	
	
	public function beforeAction(){
	}
	
	public function beforeRender(){
	}
	
	public function afterRender(){
	}
	
	/**
	 * Chama a view e renderiza a tela a partir dela
	 */
	public function render()
	{
		if ($this->tplFile && $this->render)
		{
			$this->view->data = $this->data;
			
			$parent = $this->tplParent;
			$file 	= $this->tplFile;

			$this->view->template_dir[0] .= $this->tplFolder . "/";

			$this->view->loadConfigs();

			try 
			{
				$this->view->display("extends:" . VIEWS . "$parent.tpl|$file.tpl");
			} 
			catch (Exception $e) 
			{
				trigger_error($e->getMessage(), E_USER_WARNING);
				try 
				{
					$this->view->display(VIEWS . "$parent.tpl");	
				}
				catch (Exception $e2)
				{
					trigger_error("Não foi possível exibir página html padrão! provavelmente o arquivo não existe ou a estrutura de arquivos está comprometida.", E_USER_ERROR);
				}
			}
		}
		else 
		{
			//em caso de variável view não estar definida!
			trigger_error("Variével contendo o nome da view não definida!", E_USER_WARNING);
		}
	}
	
	public function set(){
		call_user_func_array(array($this->view, 'assign'), func_get_args());
	}
}
